const dayjs = require('dayjs');
const UUID = require('uuid').v4;

module.exports = {
  /**
   * 生成jwt校验token
  * @param userId
  */
  createJwtToken(userId) {
    const { app } = this;
    const now = dayjs().unix();
    const config = app.config.jwt;
    return app.jwt.sign({
      jti: UUID(),
      iat: now,
      nbf: now,
      exp: now + config.expire,
      uid: userId,
    }, config.secret);
  },
  /**
  * 校验jwt生成的token是否有效
  * @param token
  */
  async verifyJwtToken(token) {
    const { app } = this;
    if (!token) { // 如果token不存在就抛出异常
      return false;
    }
    const secret = app.config.jwt.secret;
    try {
      return await app.jwt.verify(token, secret);
    } catch (e) { // 如果token验证失败直接抛出异常
      // 通过消息判断token是否过期
      if (e.message === 'jwt expired') {
        return false;
      }
      return false;
    }
  },
};
